#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

// int main()
// {
//     int a = 10;
//     int b = 0;
//     a /= b;

//     // pid_t id = fork();
//     // if(id == 0)
//     // {
//     //     // child
//     //     int cnt = 500;
//     //     while(cnt--)
//     //     {
//     //         cout << "I am child, my pid is: " << getpid() << endl;
//     //         sleep(1);
//     //     }

//     // }
//     // else if(id > 0)
//     // {
//     //     // father
//     //     int status = 0;
//     //     pid_t ret = waitpid(id, &status, 0);
//     //     if(ret == id)
//     //     {
//     //         cout << "wait " << id << " success, " << "exit code: " << WEXITSTATUS(status) << ", exit signalnum: " << WTERMSIG(status) << ", core dump: " << ((status >> 7)&1) << endl; 
//     //     }
//     // }
//     return 0;
// }

void work()
{
    cout << "print log..." << endl;
}

void handler(int signo)
{
    work();
    cout << "get a sig, number: " << signo << endl; 
    int n = alarm(5);
    cout << "剩余时间：" << n << endl;
}

int main()
{   
    signal(SIGALRM, handler);
    int n = alarm(50);   // 50s之后响一次
    while(1)
    {
        cout << "proc is running..., pid: " << getpid() << endl;
        sleep(1);
    }

    // signal(SIGFPE, handler);
    // cout << "div before" << endl;
    // sleep(5);

    // int a = 10;
    // a /= 0; // 异常

    // cout << "div after" << endl;
    // sleep(1);

    return 0;
}


